package com.ruoyi.dev.service.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.dev.service.IDevDatasetService;
import com.ruoyi.system.mapper.SysMenuMapper;
import com.ruoyi.system.service.ISysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.dev.mapper.DevChartMapper;
import com.ruoyi.dev.domain.DevChart;
import com.ruoyi.dev.service.IDevChartService;

/**
 * 报表Service业务层处理
 * 
 * @author yepanpan
 * @date 2024-12-23
 */
@Service
public class DevChartServiceImpl implements IDevChartService 
{
    @Autowired
    private DevChartMapper devChartMapper;
    @Autowired
    private IDevDatasetService devDatasetService;
    @Autowired
    private SysMenuMapper sysMenuMapper;


    /**
     * 查询报表
     *
     * @param code 报表代码
     * @return 报表
     */
    @Override
    public DevChart selectDevChartByCode(String code){
        DevChart chart = devChartMapper.selectDevChartByCode(code);
        if(chart != null && StringUtils.isNotEmpty(chart.getDsCode())){
            chart.setDs(devDatasetService.selectDevDatasetByCode(chart.getDsCode()));
        }
        return chart;
    }
    /**
     * 查询报表
     * 
     * @param id 报表主键
     * @return 报表
     */
    @Override
    public DevChart selectDevChartById(Long id)
    {
        return devChartMapper.selectDevChartById(id);
    }

    /**
     * 查询报表列表
     * 
     * @param devChart 报表
     * @return 报表
     */
    @Override
    public List<DevChart> selectDevChartList(DevChart devChart)
    {
        return devChartMapper.selectDevChartList(devChart);
    }

    /**
     * 新增报表
     * 
     * @param devChart 报表
     * @return 结果
     */
    @Override
    public int insertDevChart(DevChart devChart)
    {
        return devChartMapper.insertDevChart(devChart);
    }

    /**
     * 修改报表
     * 
     * @param devChart 报表
     * @return 结果
     */
    @Override
    public int updateDevChart(DevChart devChart)
    {
        return devChartMapper.updateDevChart(devChart);
    }

    /**
     * 批量删除报表
     * 
     * @param ids 需要删除的报表主键
     * @return 结果
     */
    @Override
    public int deleteDevChartByIds(Long[] ids)
    {
        return devChartMapper.deleteDevChartByIds(ids);
    }

    /**
     * 删除报表信息
     * 
     * @param id 报表主键
     * @return 结果
     */
    @Override
    public int deleteDevChartById(Long id)
    {
        return devChartMapper.deleteDevChartById(id);
    }

    /**
     * 新增报表菜单
     *
     * @param id 报表
     * @return 结果
     */
    @Override
    public int addDevChartMenu(Long id){
        DevChart devChart = devChartMapper.selectDevChartById(id);
        if(devChart == null){
            throw new ServiceException("报表不存在");
        }

        //找默认的上级菜单，不存在就添加为顶级
        SysMenu topMenu = sysMenuMapper.selectMenuById(1999L);
        Long topId = topMenu == null? 0 : topMenu.getMenuId();

        //先判断菜单是否存在
        SysMenu menu = sysMenuMapper.checkMenuNameUnique(devChart.getName(), topId);
        if(menu != null){
            throw new ServiceException("菜单 \""+devChart.getName()+"\" 已经存在，不需要重复添加");
        }

        //保存新菜单
        menu = new SysMenu();
        menu.setParentId(topId);
        menu.setMenuName(devChart.getName());
        menu.setPath("chart/"+devChart.getCode());
        menu.setPerms("chart:view:"+devChart.getCode());
        menu.setQuery("{\"code\":\""+ devChart.getCode()+"\"}");

        menu.setComponent("dev/chart/view");
        menu.setMenuType("C");
        menu.setCreateTime(new Date());
        menu.setCreateBy(SecurityUtils.getUsername());
        menu.setVisible("0");
        menu.setStatus("0");
        menu.setIsFrame("1");
        menu.setIsCache("0");
        menu.setOrderNum(9);
        return sysMenuMapper.insertMenu(menu);
    }
}
